import _ from 'lodash'

const deepSortObjectByKey = (obj) => {
  if (Array.isArray(obj)) {
    return obj.map(deepSortObjectByKey)
  }

  if (_.isPlainObject(obj)) {
    return Object.fromEntries(
      Object.entries(obj)
        .sort(([key], [otherKey]) => key.localeCompare(otherKey))
        .map(([key, value]) => [key, deepSortObjectByKey(value)]),
    )
  }

  return obj
}

export default deepSortObjectByKey
